package org.znxs.znmanus.tools;

import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.znxs.znmanus.common.FileConstant;

import java.io.File;

import static org.kohsuke.github.extras.ImpatientHttpConnector.CONNECT_TIMEOUT;

/**
 * 适用于 ai—agent 资源下载工具类
 */
@Slf4j
public class ResourceDownloadTool {

    private static final String FILE_SAVE_DIR = FileConstant.FILE_SAVE_DIR + "/download";


    @Tool(description = "从url网址 下载资源")
    public String downloadResource(
            @ToolParam(description = "下载资源的url") String url,
            @ToolParam(description = "资源的文件名称") String filename) {

        String filepath = FILE_SAVE_DIR + "/" + filename;

        try {
            FileUtil.mkdir(FILE_SAVE_DIR); // 确保目录存在

            // 使用 HttpRequest 自定义请求并设置超时
            HttpResponse response = HttpRequest.get(url)
                    .timeout(CONNECT_TIMEOUT) // 设置连接和读取超时
                    .execute();

            if (response.isOk()) {
                // 下载成功，写入文件
                response.writeBody(new File(filepath));
                log.info("文件下载完成：{}", filepath);
                return String.format("文件下载完成：%s", filepath);
            } else {
                String errorMsg = String.format("HTTP请求失败，状态码：%d", response.getStatus());
                log.error(errorMsg);
                return errorMsg;
            }

        } catch (Exception e) {
            log.error("文件下载失败", e);
            return String.format("文件下载失败：%s", e.getMessage());
        }
    }

}